#ifndef ROUNDTIMEBAR_H
#define ROUNDTIMEBAR_H

#include <QWidget>
#include <QPainter>
#include <QPushButton>
#include "config/GlobalDefine.h"
#include "TimerService.h"   // 计时器服务
#include "SoundService.h"   // 音频服务
#include "ConfigService.h"  // 配置服务

#define Abs(x) ((x)>=0?(x):-(x))

class QMediaPlayer;
class QMovie;
class RoundTimeBar : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(float _value READ getValue WRITE _setValue)
public:
    explicit RoundTimeBar(QWidget *parent = 0);
    ~RoundTimeBar();
    //控制变量
    enum SwitchFlags
    {
        //默认文字
        defaultText =0x00000001,
        //内圈渐变色
        linearColor =0x00000004,
        //装饰圆点
        decorateDot =0x00000008,
        //外圈
        outterCirle =0x0000000e,
        //动画
        animation   =0x00000010,
        //显示所有效果
        all         =0xffffffff
    };
    //内部文字展示样式
    enum InnerDefaultTextStyle
    {
        SS     =0x00000001,
        MM_SS  =0x00000002,
        HH_MM_SS =0x00000004
    };
    void setGifWidth(int width);

    void setFont(QFont font);

    // 设置静音状态
    void SetMute(bool mute);

    //设置初始角度，顺时针逆时针
    void setdefault(int,bool);
    //设置外圈宽度
    void setOutterBarWidth(float);
    //设置内圈宽度
    void setInnerBarWidth(float);
    //设置范围
    void setRange(float, float);
    //设置当前值
    void setValue(float);
    // 新增，开始倒计时
    void startCountdown();

    void stopCountdown();
    //设置外圈颜色
    void setOutterColor(const QColor&);
    //设置内圈渐变色
    void setInnerColor(const QColor&,const QColor&);

    void setInnerColor(const QColor&);
    //设置默认文字颜色
    void setDefaultTextColor(const QColor&);
    //设置控制命令
    void setControlFlags(int);
    //设置显示数字精度
    void setPrecision(int);
    //设置内圈默认文字样式
    void setInnerDefaultTextStyle(InnerDefaultTextStyle style);

    //获取当前值
    inline float getValue(){return _value;}
    // 设置外圈点与外圆的半径差
    void setDotRadiusDifference(float difference);
protected:
    void paintEvent(QPaintEvent *);

    void resizeEvent(QResizeEvent *event);
private slots:
    void updateAllData();
    
    // ========== 新的Service信号槽 ==========
    /**
     * @brief 处理计时器滴答事件（从TimerService）
     * @param remainingMs 剩余时间（毫秒）
     * @param elapsedMs 已用时间（毫秒）
     */
    void onTimerTick(int remainingMs, int elapsedMs);
    
    /**
     * @brief 处理报警触发（从TimerService）
     * @param alarmType 报警类型
     */
    void onAlarmTriggered(TipType alarmType);
    
    /**
     * @brief 处理计时器完成（从TimerService）
     */
    void onTimerFinished();
    
    // ========== UI按钮槽 ==========
    /**
     * @brief 开始/暂停按钮点击
     */
    void onStartBtn();
    
    /**
     * @brief 重置按钮点击
     */
    void onResetBtn();
    
    // ========== 音频播放槽（简化，使用SoundService） ==========
    // 已移除独立的音频方法，使用SoundService统一管理

public slots:
    // 停止警报声
    void stopAlarm();
private:
    void initData();
    void initForm();
    void connectTimerService();  // 新增：连接TimerService信号
private:
    // Store TimerConfig
    TimerConfig m_timerConfig;

    TimeoutAction m_timeoutAction;

    SoundSettings m_soundSettings;

    QFont m_font;

    int m_nGifWidth;

    qint64 _duration;

    bool isMuted = false;  // 默认未静音
    //起始角度 范围0-360
    int _startAngle;
    //顺时针
    bool _clockWise;
    //outterBar宽度
    float _outterBarWidth;

    float _dotRadiusDifference;
    //innerBar宽度
    float _innerBarWidth;
    //圆点矩形坐标
    float _dotX;
    float _dotY;
    //最小值,最大值，当前值
    float _min;
    float _max;
    float _value;
    //外圈颜色
    QColor _outterColor;
    //内圈渐变颜色
    QColor _startColor;
    QColor _endColor;
    //默认文字颜色
    QColor _textColor;
    //小数点精度
    int _precision;
    //绘制正方形信息
    float _squareStart;
    float _squareWidth;
    //控制信号
    quint32 _controlFlags=0x00000000;
    //内圈默认文字样式
    InnerDefaultTextStyle _innerDefaultTextStyle;

    // ❌ 已移除 _timer - 计时逻辑由TimerService管理
    // ❌ 已移除 _musicTimer
    // ❌ 已移除 _alarmPlayer - 音频播放由SoundService管理
    QPushButton* m_pStartBtn;    // 开始/暂停按钮
    QPushButton* m_pReflashBtn;  // 重置按钮
    QMovie *movie;               // GIF 动画
private:
    //绘制外圈
    void paintOutterBar(QPainter &);
    //绘制内圈
    void paintInnerBar(QPainter &);
    //绘制装饰圆点
    void paintDot(QPainter &);
    // 绘制外圈的点
    void paintDotsAroundCircle(QPainter& painter);
    //绘制默认内置文字
    void paintText(QPainter &);
    //设置当前值
    void _setValue(float);
    //计算绘制正方形区域信息
    void caculateSquare();
    // 启动计时器，开始循环播放音效
    void startWorkSound();
    // 停止播放和计时器
    void stopWorkSound();
};
#endif // ROUNDTIMEBAR_H
